#include<bits/stdc++.h> 
using namespace std;
//	任何一个连通无环图都可以被认为是一棵树，树的高度取决于选择的根节点，需要找到一个能够使
//	树的高度最高的根节点，这样的根叫做最深根。
//1.每一个输入都包括一个测试用例，对于每个测试用例，第一行包括一个正整数N<10000，表示
//	结点的个数，因此结点的编号为1~N。
//2.紧接着N-1行，每一行用两个顶点描述了一条边
//3.对于每一个测试用例，在一行内输出最深根，如果最深根不唯一，则按照数字大小输出。
//4.如果该图不是树，则输出Error: K components，其中K是一个数字，表示连通子图的个数
//5.图论，树论，连通子图，BFS 
struct Node{	//结点结构体，存储结点id、邻居结点集合、最大深度 
	int id;
	vector<int> neighbor;
	int deep=0;
};
bool cmp(Node a,Node b){	//用于排序的函数 
	if(a.deep > b.deep) return a.deep>b.deep;	//深度深的排前面 
	else if(a.deep == b.deep && a.id < b.id) return a.id<b.id;	//深度一样的按照id排序 
	else return false;
}
int main(){
	int N;
	cin>>N;
	if(N==1){	//如果只有一个结点的情况 
		int a;
		cin>>a>>a;
		cout<<1<<endl;
		return 0;
	}
	Node nodes[N+1];	//新建一个结点数组 
	for(int i = 1;i<N+1;i++){
		nodes[i].id = i;	//id赋初值 
	}
	for(int i = 0;i<N-1;i++){	//读入图的连通路情况，给每个结点保存邻居 
		int a,b;
		cin>>a>>b;
		nodes[a].neighbor.push_back(b);
		nodes[b].neighbor.push_back(a);
	}
	int count_=0;	//表示整个图的连通分量 
	bool visited[N+1];	//表示某个结点是否被访问过 
	fill(visited+1,visited+N+1,false);	//全填充false表示没访问过 
	for(int i = 1;i<N+1;i++){
		if(visited[i]==true) continue;	//如果某个结点已经被访问过了，则跳过 
		count_++;	//否则，连通分量++。如果一个图是连通图，那么第一个结点开始，经过遍历后，所有结点都能被访问到，所以count_会等于1。一旦有一个点出发到不了的点，则证明该图不是连通图。 
		visited[i] = true;
		queue<int> Q;
		Q.push(i);	//用队列来进行BFS遍历 
		while(!Q.empty()){
			int head = Q.front();
			for(unsigned int j =0;j<nodes[head].neighbor.size();j++){
				if(visited[nodes[head].neighbor[j]]==false){
					Q.push(nodes[head].neighbor[j]);
					visited[nodes[head].neighbor[j]] = true;
				}
			}
			Q.pop();
		}
	} 
	if(count_>1) cout<<"Error: "<<count_<<" components"<<endl;	//如果不是连通图，则输出错误以及连通分量 
	else{	//否则，再去求最深根 
		int max_deep = 0;	//假设最大深度为0 
		for(int i =1;i<N+1;i++){	//这里其实用DFS会更方便，但是我懒的再去写个DFS的函数了，就用BFS做了 
			fill(visited+1,visited+N+1,false);
			queue<int> Q;
			int last = i; 
			Q.push(i);
			visited[i]=true;
			while(!Q.empty()){
				int head = Q.front();
				for(unsigned int j=0;j<nodes[head].neighbor.size();j++){
					if(visited[nodes[head].neighbor[j]]==false){
						Q.push(nodes[head].neighbor[j]);
						visited[nodes[head].neighbor[j]] = true;
						
					}
				}
				if(head==last){	//这个是关键，比如1-2 1-3 2-4的结构，则一开始Q里是{1}，然后因为h=l，所以深度++。接着Q变成了{2，3}，l=3，等到h也到3的时候说明这一层也遍历完了，deep++,以此类推 
					nodes[i].deep ++;
					last = Q.back();
				}
				Q.pop();		
			}
		}
		sort(nodes+1,nodes+N+1,cmp);	//sort排序 
		for(int i=1;i<N+1;i++){	//遍历输出 
			if(nodes[i].deep>=max_deep){
				cout<<nodes[i].id<<endl;
				max_deep = nodes[i].deep;
			}
			else;
		} 
		
	}
	return 0;
} 
